#include <stdio.h>

typedef struct
{
    unsigned int led1 : 1;  //led1 是一个开关量，占用1一个二进制的位 0和1
    unsigned int led2 : 1;  //led2 是一个开关量，占用1一个二进制的位 0和1
    unsigned int beep : 1;  //beep 是一个开关量，占用1一个二进制的位 0和1
    unsigned int keyval : 3;    //keyval 按键的键值，占用3个二进制的位 0,1,2,3,4,5,6,7
} cmd_t;
//这个结构体的成员一共使用了 6个二进制的位，结构体成员类型是 unsigned int 是4个字节，还剩下26个位没有使用

int main(int argc, char const *argv[])
{
    printf("sizeof(cmd_t)=%ld\n", sizeof(cmd_t));
    cmd_t cmd;      //结构体定义了一个结构体变量
    cmd.led1 = 1;   //led1 赋值为1
    cmd.led2 = 0;   //led2 赋值为0
    cmd.beep = 1;   //beep 赋值为1
    cmd.keyval = 5; //keyval 赋值为5

    printf("cmd.led1=%d\n",cmd.led1);
    printf("cmd.led2=%d\n",cmd.led2);
    printf("cmd.beep=%d\n",cmd.beep);
    printf("cmd.keyval=%d\n",cmd.keyval);
    printf("********************\n");

    cmd.led1 = 10;  //提示溢出，会产生逻辑问题，取最低位 1010 ，最低位0
    cmd.led2 = 7;   //提示溢出，会产生逻辑问题，取最低位 111 ，最低位1
    cmd.beep = 2;   //提示溢出，会产生逻辑问题，取最低位 10 ，最低位0
    cmd.keyval = 10;//提示溢出，会产生逻辑问题，取最低3位 1010 ，最低位010

    printf("cmd.led1=%d\n",cmd.led1);
    printf("cmd.led2=%d\n",cmd.led2);
    printf("cmd.beep=%d\n",cmd.beep);
    printf("cmd.keyval=%d\n",cmd.keyval);

    return 0;
}
